package com.w7vm.menuweb.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.w7vm.menuweb.entity.CardapioInfantilWeb;
import com.w7vm.menuweb.entity.CardapioLaCarteWeb;
import com.w7vm.menuweb.entity.RestauranteFilialWeb;
import com.w7vm.menuweb.entity.RestauranteSedeWeb;

@Stateless
public class CardapioLaCarteDAO extends GenericDAO<CardapioLaCarteWeb> {

	
	@PersistenceContext
	private EntityManager em;
	
	public CardapioLaCarteDAO() {
		super(CardapioLaCarteWeb.class);
	}


	public int saveCardapioLaCarte(CardapioLaCarteWeb laCarteEntity) {
		System.out.println("[IAM-EJB][saveCardapioLaCarte] :");
		em.persist(laCarteEntity);
		em.flush();
		return laCarteEntity.getIdCardapioLaCarteWeb();
	}

	public CardapioLaCarteWeb mergeUpdate(CardapioLaCarteWeb laCarteEntity) {
		System.out.println("[IAM-EJB][mergeUpdate] :"+ laCarteEntity.getIdCardapioLaCarteWeb());
		return super.update(laCarteEntity);
	}

	public void deleteCardapioLaCarte(int id) {
		System.out.println("[IAM-EJB][deleteCardapioLaCarte] :"+ id);
		CardapioLaCarteWeb laCarteEntity = new CardapioLaCarteWeb(); 
		laCarteEntity = em.find(CardapioLaCarteWeb.class, id);
		em.remove(laCarteEntity);
		em.flush();
	}

	public List<CardapioLaCarteWeb> findCardapioLaCarteByIDRestauranteSede(int id) {
		System.out.println("[IAM-EJB][findCardapioLaCarteByIDRestauranteSede] :"+ id);
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("idRestaurante", id);
		try{
			return super.findByCriterion(CardapioLaCarteWeb.FIND_LACARTE_BY_IDRESTAURANTESEDE, parameters);
		}catch (NoResultException e){
			System.err.println(e.getMessage());
			return null;
		}
	}

	public List<CardapioLaCarteWeb> findCardapioLaCarteByIDRestauranteFilial(int id) {

		System.out.println("[IAM-EJB][findCardapioLaCarteByIDRestauranteFilial] :"+ id);
		
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("idRestaurante", id);
		try{
			return super.findByCriterion(CardapioLaCarteWeb.FIND_LACARTE_BY_IDRESTAURANTEFILIAL, parameters);
		}catch (NoResultException e){
			System.err.println(e.getMessage());
			return null;
		}
	}
	
	public CardapioLaCarteWeb findCardapioLaCarteByID(int entityID) {
		System.out.println("[CARDAPIO-G2][findCardapioLaCarteByID] :"+ entityID);
		try{
			Map<String, Object> parameters = new HashMap<String, Object>();
			parameters.put("idCardapioLaCarte", entityID);   
			return super.findOneResult(CardapioLaCarteWeb.FIND_LACARTE_BY_ID, parameters);
		}catch (NoResultException e){
			System.err.println(e.getMessage());
			return null;
		}
	}
	

	public int alterarStatusCardapioLaCarte(CardapioLaCarteWeb laCarteEntity) {
		System.out.println("[IAM-EJB][alterarStatusCardapioLaCarte] :"+ laCarteEntity.getIdCardapioLaCarteWeb());

		try{
			Query q1 = em.createQuery("UPDATE CardapioLaCarteWeb SET diasSemana = ?, dtInicio = ?, dtTermino = ?," +
					" status = ? WHERE idCardapioLaCarteWeb = ?");
	
			q1.setParameter(1, laCarteEntity.getDiasSemana());
			q1.setParameter(2, laCarteEntity.getDtInicio());
			q1.setParameter(3, laCarteEntity.getDtTermino());
			q1.setParameter(4, laCarteEntity.getStatus());
			q1.setParameter(5, laCarteEntity.getIdCardapioLaCarteWeb());
			
			int updated = q1.executeUpdate();
			return updated;

		}catch (NoResultException e){
			System.err.println(e.getMessage());
			return 0;
		}
	}


	
}
